import Vue from "vue";
import store, { setStore } from "./store";
import { navTo } from "./utils/setup";

const { http } = uni.$u;
Vue.prototype.$http = http;
uni.$http = http;

http.setConfig((config) => {
  config.baseURL = `https://tablo.fun/app/39`;
  // config.timeout = 30e3;
  return config;
});

http.interceptors.request.use(
  (config) => {
    const { token } = store.state.userData;
    if (token) {
      config.header.token = token;
    }
    return config;
  },
  (config) => {
    return Promise.reject(config);
  }
);

function handErr(e) {
  let { data = {}, config } = e;
  let msg = `${e.statusCode} error`;
  if (data) {
    msg = data.errMsg || data.msg || e.errMsg || data.message;
  }
  if (e.statusCode == 401) {
    const act = getCurrentPages().length == 1 ? "navigateTo" : "redirectTo";
    setStore({
      userData: {},
      userInfo: {},
    });
    uni.hideLoading();
    navTo("user/login", act);
  }
  if (!config.custom.noTip) {
    if (/fail abort/.test(msg)) {
      msg = ""; // 网络异常
    }
    if (/request/.test(msg)) {
      msg = "";
    }
    if (msg) {
      e.errMsg = msg;
      setTimeout(() => {
        uni.showToast({
          title: msg,
          icon: "none",
          duration: 2000,
        });
      }, 10);
    }
  }
  return Promise.reject(e);
}

http.interceptors.response.use(
  (res) => {
    const { data } = res;
    if (typeof data == "object" && "code" in data) {
      if (data.code !== 0) {
        return handErr(res);
      }
      // return data;
    }
    return res;
  },
  (res) => {
    console.log("err", res);
    return handErr(res);
  }
);
